"""1.1.2  时间序列与常用操作"""
import pandas as pd

# start指定起始日期，end指定结束日期，periods指定产生的数据数量
# freq指定间隔，D表示天，W表示周，H表示小时
# M表示月末最后一天，MS表示月初第一天
# T表示分钟，A（Y）表示年末最后一天，AS（YS）表示年初第一天
print('间隔5天'.ljust(30, '='))
print(pd.date_range(start='20190601', end='20190630', freq='5D'))  # 生成时间序列，间隔为5天

print('间隔1周'.ljust(30, '='))
print(pd.date_range(start='20190601', end='20190630', freq='W'))  # 生成时间序列，间隔为1周

print('间隔2天，5个数据'.ljust(30, '='))
print(pd.date_range(start='20190601', periods=5, freq='2D'))  # 生成时间序列，间隔为2天，产生5个数据

print('间隔3小时，8个数据'.ljust(30, '='))
print(pd.date_range(start='20190601', periods=8, freq='3H'))  # 生成时间序列，间隔为3小时，产生8个数据

print('从3：00开始，间隔1分钟，12个数据'.ljust(30, '='))
print(pd.date_range(start='201906010300', periods=12, freq='T'))  # 生成时间序列，从3：00开始，间隔1分钟，12个数据

print('间隔1月，每次为月末最后一天'.ljust(30, '='))
print(pd.date_range(start='20190101', end='20191231', freq='M'))  # 生成时间序列，间隔为2天，产生5个数据

print('从20190101开始，间隔1年，6个数据，每次为年末最后一天'.ljust(30, '='))
print(pd.date_range(start='20190101', periods=6, freq='A'))  # 生成时间序列，从20190101开始，间隔1年，6个数据，每次为年末最后一天

print('从20190101开始，间隔1年，6个数据，每次为年初第一天'.ljust(30, '='))
print(pd.date_range(start='20190101', periods=6, freq='AS'))  # 生成时间序列，从20190101开始，间隔1年，6个数据，每次为年初第一天

# 使用日期时间做索引，创建Series对象
# 时间序列（从20190701开始，间隔为1小时，24个数据）作为索引，range列表作为值，生成Series一维数组
data = pd.Series(index=pd.date_range(start='20190701', periods=24, freq='H'), data=range(24))
print('Series数组的前五条数据'.ljust(30, '='))
print(data[:5])  # 输出Series数组的前五条数据

print('3小时重采样，计算均值'.ljust(30, '='))
print(data.resample('3H').mean())  # 窗口大小为3小时（24小时划分为8个窗口），计算其平均值

print('5小时重采样，计算和值'.ljust(30, '='))
print(data.resample('5H').sum())  # 窗口大小为5小时（24小时划分为5个窗口），计算其和值

# OHLC分别表示OPEN、HIGH、LOW、CLOSE
print('5小时重采样，统计OHCP值'.ljust(30, '='))
print(data.resample('5H').ohlc())  # 窗口大小为5小时（24小时划分为5个窗口），计算其OPCH值，open值即为开始值，high值即为最大值，low值即为最小值，close值即为结束值

print('Series的时间序列索引，在此基础上加上一天'.ljust(20, '='))
data.index = data.index + pd.Timedelta('1D')  # 将Series的时间序列索引，在此基础上加上一天
print(data[:5])  # 输出Series数组的前5条数据
